import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../app_routes.dart';
import '../../controllers/auth_controller.dart';
import '../../constants/enums/user_role.dart';

/// 角色权限中间件 - 用于保护需要特定角色才能访问的路由
class RoleMiddleware extends GetMiddleware {
  final UserRole requiredRole;
  
  RoleMiddleware({required this.requiredRole});

  @override
  int? get priority => 1;

  @override
  RouteSettings? redirect(String? route) {
    final AuthController authController = Get.find<AuthController>();
    
    // 如果用户未登录，让Auth中间件处理
    if (!authController.isLoggedIn) return null;
    
    // 获取当前用户角色
    final UserRole? userRole = authController.userRole;
    
    // 检查用户角色权限
    if (userRole == null) {
      // 没有角色信息，重定向到未授权页面
      return const RouteSettings(name: AppRoutes.unauthorized);
    } else if (requiredRole == UserRole.superAdmin && !userRole.isSuperAdmin) {
      // 需要超级管理员权限但不是超级管理员
      return const RouteSettings(name: AppRoutes.unauthorized);
    } else if (requiredRole == UserRole.admin && !userRole.isAdmin) {
      // 需要管理员权限但不是管理员
      return const RouteSettings(name: AppRoutes.unauthorized);
    } else if (requiredRole == UserRole.operator && 
              !userRole.isOperator && 
              !userRole.isAdmin) {
      // 需要操作员权限但既不是操作员也不是管理员
      return const RouteSettings(name: AppRoutes.unauthorized);
    }
    
    // 有足够的权限，不重定向
    return null;
  }
  
  @override
  GetPage? onPageCalled(GetPage? page) {
    return page;
  }
  
  @override
  List<Bindings>? onBindingsStart(List<Bindings>? bindings) {
    return bindings;
  }
  
  @override
  GetPageBuilder? onPageBuildStart(GetPageBuilder? page) {
    debugPrint('角色中间件: 页面构建中');
    return page;
  }
  
  @override
  Widget onPageBuilt(Widget page) {
    debugPrint('角色中间件: 页面已构建');
    return page;
  }
  
  @override
  void onPageDispose() {
    debugPrint('角色中间件: 页面已释放');
  }
} 